www.gusucode.com > VC++ 在窗体空白区添加一张背景图-源码程序 > VC++ 在窗体空白区添加一张背景图-源码程序/code/MdiClient.cpp
#include "stdafx.h" #include "MdiClient.h" //Download by http://www.NewXing.com #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif CMdiClient::CMdiClient() { m_pBmp = NULL; m_nBackColor = CLR_INVALID; } CMdiClient::~CMdiClient() { if (m_pBmp) { m_pBmp->DeleteObject(); delete m_pBmp; m_pBmp = NULL; } } IMPLEMENT_DYNCREATE(CMdiClient, CWnd) BEGIN_MESSAGE_MAP(CMdiClient, CWnd) //{{AFX_MSG_MAP(CMdiClient) ON_WM_ERASEBKGND() ON_WM_SIZE() //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CMdiClient::OnEraseBkgnd(CDC* pDC) { CRect rect; GetClientRect(&rect); if (m_nBackColor != CLR_INVALID) pDC->FillSolidRect(&rect, m_nBackColor); else if (m_pBmp != NULL) { BITMAP bm; CDC dcMem; VERIFY(m_pBmp->GetObject(sizeof(BITMAP), (LPVOID)&bm)); dcMem.CreateCompatibleDC(NULL); CBitmap* pOldBitmap = dcMem.SelectObject(m_pBmp); for (register int nX = 0; nX < rect.Width(); nX += bm.bmWidth) for (register int nY = 0; nY < rect.Height(); nY += bm.bmHeight) pDC->BitBlt(nX, nY, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY); dcMem.SelectObject(pOldBitmap); } else CWnd::OnEraseBkgnd(pDC); return TRUE; } COLORREF CMdiClient::SetBackColor(COLORREF nBackColor) { LockWindowUpdate(); COLORREF cr = m_nBackColor; m_nBackColor = nBackColor; UnlockWindowUpdate(); return cr; } BOOL CMdiClient::SetBitmap(UINT nID) { BOOL bResult = true; LockWindowUpdate(); if (m_pBmp) { m_pBmp->DeleteObject(); delete m_pBmp; m_pBmp = NULL; } m_pBmp = new CBitmap(); bResult = m_pBmp->LoadBitmap(nID); UnlockWindowUpdate(); return bResult; } void CMdiClient::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); if (m_pBmp != NULL) Invalidate(); }